import random
import matplotlib.pyplot as plt
import numpy as np
from collections import Counter

# 设置随机种子确保结果可复现
random.seed(42)
np.random.seed(42)

# 生成100个随机整数(1-100)
random_integers = [random.randint(1, 100) for _ in range(100)]

# 生成100个随机浮点数(0-1)
random_floats = [random.random() for _ in range(100)]

# 生成100个符合正态分布的随机数(均值50，标准差10)
normal_distribution = np.random.normal(50, 10, 100).tolist()

# 计算基本统计量
def calculate_statistics(data):
    mean = sum(data) / len(data)
    median = sorted(data)[len(data) // 2]
    variance = sum((x - mean) ** 2 for x in data) / len(data)
    std_dev = variance ** 0.5
    return mean, median, variance, std_dev

# 分析整数数据
int_mean, int_median, int_var, int_std = calculate_statistics(random_integers)

# 分析正态分布数据
norm_mean, norm_median, norm_var, norm_std = calculate_statistics(normal_distribution)

# 统计整数出现频率
int_frequency = Counter(random_integers)
top_10_integers = int_frequency.most_common(10)

# 绘制整数频率直方图
plt.figure(figsize=(12, 8))

plt.subplot(2, 2, 1)
plt.hist(random_integers, bins=20, alpha=0.7, color='skyblue')
plt.title('随机整数分布直方图')
plt.xlabel('数值')
plt.ylabel('频率')

# 绘制浮点数分布
plt.subplot(2, 2, 2)
plt.scatter(range(len(random_floats)), random_floats, alpha=0.5, color='green')
plt.title('随机浮点数分布散点图')
plt.xlabel('索引')
plt.ylabel('数值')

# 绘制正态分布图
plt.subplot(2, 2, 3)
plt.hist(normal_distribution, bins=20, alpha=0.7, color='purple')
plt.title('正态分布数据直方图')
plt.xlabel('数值')
plt.ylabel('频率')

# 绘制整数频率条形图
plt.subplot(2, 2, 4)
plt.bar([str(x[0]) for x in top_10_integers], [x[1] for x in top_10_integers], alpha=0.7, color='orange')
plt.title('出现频率最高的10个整数')
plt.xlabel('整数')
plt.ylabel('出现次数')

plt.tight_layout()
plt.savefig('random_data_analysis.png')
plt.show()

# 打印统计结果
print("===== 整数数据统计 =====")
print(f"平均值: {int_mean:.2f}")
print(f"中位数: {int_median}")
print(f"方差: {int_var:.2f}")
print(f"标准差: {int_std:.2f}")
print("\n===== 正态分布数据统计 =====")
print(f"平均值: {norm_mean:.2f}")
print(f"中位数: {norm_median}")
print(f"方差: {norm_var:.2f}")
print(f"标准差: {norm_std:.2f}")
print("\n===== 出现频率最高的10个整数 =====")
for num, freq in top_10_integers:
    print(f"整数 {num}: 出现 {freq} 次")
